Variables:

Risk Age Sex Country

library(data.table)
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
data.table 1.14.8 using 1 threads (see ?getDTthreads).  Latest news: r-datatable.com
**********
This installation of data.table has not detected OpenMP support. It should still work but in single-threaded mode.
This is a Mac. Please read https://mac.r-project.org/openmp/. Please engage with Apple and ask them for support. Check r-datatable.com for updates, and our Mac instructions here: https://github.com/Rdatatable/data.table/wiki/Installation. After several years of many reports of installation problems on Mac, it's time to gingerly point out that there have been no similar problems on Windows or Linux.
**********

Attaching package: ‘data.table’

The following objects are masked from ‘package:dplyr’:

    between, first, last
library(tidyr)
library(maps)
library(haven)
library(ggplot2)
library(dplyr)

#read the data (Wave 5)

# Data of Wave 5


WV5_data <- readRDS("/Users/cristinacandido/Documents/Github/risk_wvs/data/WVS/F00007944-WV5_Data_R_v20180912.rds")


# Convert WV5_data-object in data.frame 
WV5_data_df <- as.data.frame(WV5_data)

# show first five columns
WV5_data_df

clean the data set

# Read countrynames data from the CSV file
countrynames <- read.csv("/Users/cristinacandido/Documents/Github/risk_wvs/data/WVS/countrynames.txt", header = FALSE, as.is = TRUE)
colnames(countrynames) <- c("code", "name")

# Assuming WV5_data has a column named country_code
WV5_data$country <- countrynames$name[match(WV5_data$country_code, countrynames$code)]

# Check the frequency of each country in the new column
table(WV5_data$country)

            Andorra           Argentina           Australia              Brazil 
               1003                1002                1421                1500 
           Bulgaria        Burkina Faso              Canada               Chile 
               1001                1534                2164                1000 
              China            Colombia          Cyprus (G)               Egypt 
               1991                3025                1050                3051 
           Ethiopia             Finland              France             Georgia 
               1500                1014                1001                1500 
            Germany               Ghana       Great Britain           Guatemala 
               2064                1534                1041                1000 
          Hong Kong             Hungary               India           Indonesia 
               1252                1007                2001                2015 
               Iran                Iraq               Italy               Japan 
               2667                2701                1012                1096 
             Jordan            Malaysia                Mali              Mexico 
               1200                1201                1534                1560 
            Moldova             Morocco         Netherlands         New Zealand 
               1046                1200                1050                 954 
             Norway                Peru              Poland             Romania 
               1025                1500                1000                1776 
             Russia              Rwanda            Slovenia        South Africa 
               2033                1507                1037                2988 
        South Korea               Spain              Sweden         Switzerland 
               1200                1200                1003                1241 
             Taiwan            Thailand Trinidad and Tobago              Turkey 
               1227                1534                1002                1346 
            Ukraine       United States             Uruguay            Viet Nam 
               1000                1249                1000                1495 
             Zambia 
               1500 
# Display the updated WV5_data
print(WV5_data)




#Read Dataset (Wave 6)

WV6_data <- load("/Users/cristinacandido/Documents/Github/risk_wvs/data/WVS/WV6_Data_R_v20201117.rdata") 
WV6_data <- WV6_Data_R_v20201117 
print(WV6_data)

#rename variables

#decode daraset (Wave 6)

countrynames = read.csv("/Users/cristinacandido/Documents/Github/risk_wvs/data/WVS/countrynames.txt", header=FALSE,as.is=TRUE)
colnames(countrynames) = c("code", "name")
WV6_data$country = countrynames$name [match(WV6_data$country_code, countrynames$code)]
table(WV6_data$country)

            Algeria           Argentina             Armenia           Australia 
               1200                1030                1100                1477 
         Azerbaijan             Belarus              Brazil               Chile 
               1002                1535                1486                1000 
              China            Colombia          Cyprus (G)             Ecuador 
               2300                1512                1000                1202 
              Egypt             Estonia             Georgia             Germany 
               1523                1533                1202                2046 
              Ghana               Haiti           Hong Kong               India 
               1552                1996                1000                4078 
               Iraq               Japan              Jordan          Kazakhstan 
               1200                2443                1200                1500 
             Kuwait          Kyrgyzstan             Lebanon               Libya 
               1303                1500                1200                2131 
           Malaysia              Mexico             Morocco         Netherlands 
               1300                2000                1200                1902 
        New Zealand             Nigeria            Pakistan           Palestine 
                841                1759                1200                1000 
               Peru         Philippines              Poland               Qatar 
               1210                1200                 966                1060 
            Romania              Russia              Rwanda           Singapore 
               1503                2500                1527                1972 
           Slovenia        South Africa         South Korea               Spain 
               1069                3531                1200                1189 
             Sweden              Taiwan            Thailand Trinidad and Tobago 
               1206                1238                1200                 999 
            Tunisia              Turkey             Ukraine       United States 
               1205                1605                1500                2232 
            Uruguay          Uzbekistan               Yemen            Zimbabwe 
               1000                1500                1000                1500 
WV6_data

#combine the 2 dataset (Wave 6 + Wave 5)

WV5_data
WV6_data
WVS_data = rbind(WV5_data, WV6_data)
WVS_data
NA
NA
NA
NA
NA

#exclusion of participants and omission of missing data (na)

#World map

world_map <- map_data("world")
recorded_countries <- unique(WVS_data$country)
world_map$recorded <- ifelse(world_map$region %in% recorded_countries, "Recorded", "Not Recorded")

ggplot(world_map, aes(x = long, y = lat, group = group, fill = recorded)) + 
  geom_polygon(color = "white") +
  scale_fill_manual(values = c("Recorded" = "red", "Not Recorded" = "lightgrey"), guide = "none") +
  theme_void() +
  labs(title = "WVS", fill = "Status") +
  theme(legend.position = "none", plot.title = element_text(hjust = 0.5))

# Load the dplyr package
library(dplyr)

# Assuming the data frame is called 'data' and the column containing the country information is called 'country'
country_counts <- WVS_data %>%
  count(country)

# Print the result
print(country_counts)
NA
# read in file that contains hardship indicators manually collected from CIA factbook, WHO, and World Bank 
# (see Supplemental Materials for URL sources)
countryfacts = read.csv("/Users/cristinacandido/Documents/Github/risk_wvs/data/WVS/countryfacts_selection.csv", as.is = TRUE, header = TRUE) 

# Create a vector of labels with the same length as the number of columns in 'countryfacts'
labels <- c("code","country","codeWVS","Homicide","GDP","InfMort","LifeExp","GINI","GenderPEdu","code2")




# Print the result
print(countryfacts)
# Load the dplyr package if not already loaded
if (!require(dplyr)) {
  install.packages("dplyr")
  library(dplyr)
}

# Create the 'hardship' column in the 'countryfacts' data frame
countryfacts <- countryfacts %>%
  mutate(hardship = (homiciderate + gdp + infantmortality + lifeexpectancy + gini + femalemale_primedu) / 6)
countryfacts



# View the distribution of the 'hardship_index' column for each country
hardship_index_distribution <- countryfacts %>%
  group_by(label) %>%
  summarize(
    mean = mean(hardship, na.rm = TRUE),
    median = median(hardship, na.rm = TRUE),
    sd = sd(hardship, na.rm = TRUE),
    min = min(hardship, na.rm = TRUE),
    max = max(hardship, na.rm = TRUE),
    n = sum(!is.na(hardship))
  )

# Print the result
print(hardship_index_distribution)

#table with female percentage, mean age, mean risk taking per countries (summary of the countries)

library(dplyr)

table_data_WVS <- WVS_data %>%
  group_by(country) %>%
  summarise(
    n = n(),
    female_percentage = mean(gender == 1) * 100,
    mean_age = mean(age, na.rm = TRUE),
    age_range = paste(min(age, na.rm = TRUE), "-", max(age, na.rm = TRUE)),
    mean_risktaking = mean(Z_score_risktaking, na.rm = TRUE)
  )

table_data_WVS
#graph across countries: risk taking vs age vs gender (Z-score for age and risk taking)   


# Risk vs age with color-coded gender per Country
# Risk vs age with color-coded gender per Country
# Skalierung des Z-Scores für das Alter anpassen
WVS_data$z_score_age_scaled <- 15 * WVS_data$z_score_age + 42


ggplot(WVS_data, aes(z_score_age_scaled, Z_score_risktaking, color = as.factor(gender))) +
  geom_point(position = position_jitter(width = 0.1, height = 0.1), size = 0.1) +  
  geom_smooth(method = "lm") +
  geom_vline(xintercept = 42, linetype = "dashed", color = "black", size = 1) +  
  scale_color_manual(values = c("blue", "red"), labels = c("Male", "Female")) +
  labs(color = "Gender") +
  xlab("Age") +
  ylab("Risk Taking") +
  scale_x_continuous(breaks = seq(0, 100, by = 15), limits = c(0, 100)) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
Please use `linewidth` instead.

WVS_data
NA
NA
NA
NA
NA
NA
NA
NA
NA
#regression table (risk taking and age -> Z-score)

regression_results_WVS <- WVS_data %>%
  group_by(country) %>%
  do(model = lm(Z_score_risktaking ~ scale(age) + gender, data = .)) %>%
  summarize(
    country = first(country),
    intercept = coef(summary(model))[1, 1],
    slope_age = coef(summary(model))[2, 1],
    slope_gender = coef(summary(model))[3, 1]
  )

regression_results_WVS
NA
NA
gps_data <- haven::read_dta("/Users/cristinacandido/Documents/Github/risk_wvs/data/individual_new.dta")

gps_data
# Clean the data by removing records with missing values
gps_data <- gps_data %>%
  drop_na(country, isocode, risktaking, gender, age)



# Display the cleaned data
gps_data
#select only the variables of interest
gps_data <- gps_data %>%
  dplyr::select(country, isocode, ison, risktaking, gender, age)
gps_data
#Z-score for age 
gps_data <- gps_data %>%
  group_by(country) %>%
  mutate(z_score_age = scale(age))

# Display the new column with Z-Scores per Country
gps_data

#table intercept and slope

regression_results_gps <- gps_data %>%
  group_by(country) %>%
  do(model = lm(risktaking ~ z_score_age + gender, data = .)) %>%
  summarize(
    country = first(country),
    intercept = coef(summary(model))[1, 1],
    slope_age = coef(summary(model))[2, 1],
    slope_gender = coef(summary(model))[3, 1]
  )

regression_results_gps
common_countries <- intersect(WVS_data$country, gps_data$country)
selected_countries <- c("Argentina", "Australia", "Brazil", "Canada", "Chile", "China", "Egypt", "Finland", "France", "Georgia",
                         "Germany", "Ghana", "Hungary", "India", "Indonesia", "Iran", "Japan", "Jordan", "Mexico", "Moldova",
                         "Morocco", "Netherlands", "Peru", "Poland", "Romania", "Russia", "Rwanda", "South Africa", "South Korea",
                         "Spain", "Sweden", "Switzerland", "Thailand", "Turkey", "Ukraine", "United States", "Algeria", "Colombia",
                         "Estonia", "Haiti", "Iraq", "Kazakhstan", "Nigeria", "Pakistan", "Philippines", "Zimbabwe", "United Kingdom")

# Filter the original dataset
new_WVS <- WVS_data[WVS_data$country %in% selected_countries, ]

# View the new dataset
new_WVS
NA
NA

selected_countries <- c("Argentina", "Australia", "Brazil", "Canada", "Chile", "China", "Egypt", "Finland", "France", "Georgia",
                         "Germany", "Ghana", "Hungary", "India", "Indonesia", "Iran", "Japan", "Jordan", "Mexico", "Moldova",
                         "Morocco", "Netherlands", "Peru", "Poland", "Romania", "Russia", "Rwanda", "South Africa", "South Korea",
                         "Spain", "Sweden", "Switzerland", "Thailand", "Turkey", "Ukraine", "United States", "Algeria", "Colombia",
                         "Estonia", "Haiti", "Iraq", "Kazakhstan", "Nigeria", "Pakistan", "Philippines", "Zimbabwe", "United Kingdom")

# Filter the original dataset
new_gps <- gps_data[gps_data$country %in% selected_countries, ]

# View the new dataset
new_gps
NA
regression_results_WVS_new <- new_WVS %>%
  group_by(country) %>%
  do(model = lm(Z_score_risktaking ~ scale(age) + gender, data = .)) %>%
  summarize(
    country = first(country),
    intercept_WVS = coef(summary(model))[1, 1],
    slope_age_WVS = coef(summary(model))[2, 1],
    slope_gender_WVS = coef(summary(model))[3, 1]
  )

regression_results_WVS_new
NA
regression_results_gps_new <- new_gps %>%
  group_by(country) %>%
  do(model = lm(risktaking ~ scale(age) + gender, data = .)) %>%
  summarize(
    country = first(country),
    intercept_gps = coef(summary(model))[1, 1],
    slope_age_gps = coef(summary(model))[2, 1],
    slope_gender_gps = coef(summary(model))[3, 1]
  )

regression_results_gps_new
NA
library(readxl)
library(dplyr)  # Don't forget to load the dplyr package

regression_results_gps_new
regression_results_WVS_new

# Assuming "country" is the common column
merged_results <- merge(regression_results_gps_new, regression_results_WVS_new, by = "country", all = TRUE)

# Read data from the Excel file
new_data <- read_excel("/Users/cristinacandido/Documents/Github/risk_wvs/data/Hardship_complete.xlsx")

# Now you can work with the 'new_data' object
print(new_data)

# Perform the left_join operation
new_data <- left_join(merged_results, new_data, by = "country")

# Select specific columns
new_data <- new_data %>%
  dplyr::select(country, intercept_gps, slope_age_gps, slope_gender_gps, intercept_WVS, slope_age_WVS, slope_gender_WVS, isocode)

# Print the final data
print(new_data)

hardship_index <- read_excel("/Users/cristinacandido/Documents/Github/risk_wvs/data/Hardship_complete.xlsx")
print(hardship_index)


hardship_data_complete <- left_join(regression_results_WVS, hardship_index, by = "country")
hardship_data_complete
NA
NA
NA

log transform

hardship_data_complete$mean_homicide=log(hardship_data_complete$mean_homicide)
hardship_data_complete$gdp=log(hardship_data_complete$gdp)
hardship_data_complete$Infant_mortality=log(hardship_data_complete$Infant_mortality)
hardship_data_complete$life_expect=log(hardship_data_complete$life_expect)
hardship_data_complete$gini_income=log(hardship_data_complete$gini_income)


# changing variables into the same direction

# Reverse Codierung
hardship_data_complete$mean_homicide=scale(hardship_data_complete$mean_homicide)
hardship_data_complete$gdp=scale(-hardship_data_complete$gdp)
hardship_data_complete$Infant_mortality=scale(hardship_data_complete$Infant_mortality)
hardship_data_complete$life_expect=scale(-hardship_data_complete$life_expect)
hardship_data_complete$gini_income=scale(hardship_data_complete$gini_income)
hardship_data_complete

create a hardship index

hardship_data_complete$hardship=(hardship_data_complete$mean_homicide+hardship_data_complete$gdp+hardship_data_complete$gini_income+hardship_data_complete$life_expect+hardship_data_complete$Infant_mortality)/5

hardship_data_complete
NA
# Plotting comparing interecepts
ggplot(new_data, aes(x = intercept_gps, y = intercept_WVS, label = isocode)) +
  geom_point(size = 1.5) +
  geom_text(aes(label = isocode), vjust = -0.5, hjust = -0.5) +
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed") +
  labs(title = "Comparison of Intercept Values",
       x = "Intercept_gps",
       y = "Intercept_WVS") +
  theme_minimal() +
  xlim(c(0, 1.2)) +
  ylim(c(0, 1.2)) +
  coord_fixed()


# Assuming you have a data frame named 'new_data' with columns 'intercept_gps', 'intercept_WVS', and 'isocode'

# Install and load the necessary packages
library(ggplot2)
library(ggrepel)
library(wordcloud)
Loading required package: RColorBrewer
# Assuming you have a data frame named 'new_data' with columns 'intercept_gps', 'intercept_WVS', and 'isocode'

# Scatter plot with labels
library(ggplot2)
library(ggrepel)

# Assuming you have a data frame named 'new_data' with columns 'intercept_gps', 'intercept_WVS', and 'isocode'

ggplot(new_data, aes(x = intercept_gps, y = intercept_WVS, label = isocode)) +
  geom_point(size = 3) +
  geom_text_repel(
    aes(label = isocode),
    box.padding = 0.5,
    point.padding = 0.1,
    force = 5
  ) +
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed") +
  labs(x = "Intercept Global Preference Study",
       y = "Intercept World Value Survey") +
  theme_minimal() +
  xlim(c(0, 1.07)) +
  ylim(c(0, 1.07)) +
  coord_fixed()



# Annotate with word cloud
wordcloud(words = new_data$isocode, freq = rep(1, nrow(new_data)), scale = c(2, 0.5))



# Annotate with word cloud
wordcloud(words = new_data$isocode, freq = rep(1, nrow(new_data)), scale = c(2, 0.5))





# Assuming merged_results has columns intercept_gps and intercept_WVS
model <- lm(intercept_WVS ~ intercept_gps, data = merged_results)

# View the summary of the regression model
summary(model)

Call:
lm(formula = intercept_WVS ~ intercept_gps, data = merged_results)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.65390 -0.13269 -0.00167  0.15938  0.68089 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)    0.28224    0.04289   6.580 4.28e-08 ***
intercept_gps  0.47492    0.13919   3.412  0.00137 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2735 on 45 degrees of freedom
Multiple R-squared:  0.2055,    Adjusted R-squared:  0.1879 
F-statistic: 11.64 on 1 and 45 DF,  p-value: 0.001373
# Calculate the correlation
correlation <- cor(merged_results$intercept_gps, merged_results$intercept_WVS)

# Print the correlation coefficient
print(correlation)
[1] 0.4533552
  
library(ggplot2)



# Plotting using ggplot2
ggplot(new_data, aes(x = slope_age_gps, y = slope_age_WVS, label = isocode)) +
  geom_point(size = 3) +
  geom_text_repel(
    aes(label = isocode),
    box.padding = 0.5,
    point.padding = 0.1,
    force = 5
  ) +
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed") +
  labs(x = "Effect of Age on Risk Taking Global Preference Study",
       y = "Effect of Age on Risk Taking World Value Survey") +
  theme_minimal() +
  xlim(-0.5, 0) +
  ylim(c(-0.5, 0)) +
  coord_fixed()


new_data

correlation <- cor(new_data$slope_age_gps, new_data$slope_age_WVS)

# Print the correlation coefficient
print(correlation)
[1] 0.4202296
# Plotting using ggplot2
ggplot(new_data, aes(x = slope_gender_gps, y = slope_gender_WVS, label = isocode)) +
  geom_point(size = 3) +
  geom_text_repel(
    aes(label = isocode),
    box.padding = 0.5,
    point.padding = 0.1,
    force = 5
  ) +
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed") +
  labs(x = "Effect of Gender on Risk Taking Global Preference Study",
       y = "Effect of Gender on Risk Taking World Value Survey") +
  theme_minimal() +
  xlim(-0.6, 0.12) +
  ylim(c(-0.6, 0.12)) +
  coord_fixed()


new_data

correlation <- cor(new_data$slope_gender_gps, new_data$slope_gender_WVS)

# Print the correlation coefficient
print(correlation)
[1] 0.3050746
#hardship for WVS
library(readxl)
hardship_values <- read_excel("/Users/cristinacandido/Documents/Github/risk_wvs/data/hardship_complete.xlsx") # Read data from the Excel file

labels <- c("country", "code", "gdp", "gini", "Infant_mortality", "life_expect", "hardship")

print(hardship_values)

# Assuming hardship_data_complete is your data frame with the mentioned columns
# Replace the column names as per your actual column names

# Z-standardize specific columns
hardship_values$gdp <- scale(hardship_values$gdp)
hardship_values$gini_income <- scale(hardship_values$gini_income)
hardship_values$Infant_mortality <- scale(hardship_values$Infant_mortality)
hardship_values$life_expect <- scale(hardship_values$life_expect)
hardship_values$mean_homicide <- scale(hardship_values$mean_homicide)

hardship_values

hardship_values <- hardship_values%>%
  mutate(hardship = (mean_homicide + gdp + Infant_mortality + life_expect + gini_income) / 5)
hardship_values
hardship_data_complete <- left_join(regression_results_WVS, hardship_values, by = "country")
hardship_data_complete

<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->



<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->



<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->



<!-- rnb-chunk-end -->


<!-- rnb-chunk-begin -->



<!-- rnb-chunk-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxubGlicmFyeShnZ3JlcGVsKVxubGlicmFyeShnZ3Bsb3QyKVxuI0ZvciBXVlNcbmdncGxvdChoYXJkc2hpcF9kYXRhX2NvbXBsZXRlLCBhZXMoeCA9IGhhcmRzaGlwLCB5ID0gaW50ZXJjZXB0LCBsYWJlbCA9IGlzb2NvZGUpKSArXG4gIGdlb21fcG9pbnQoc2l6ZSA9IDMpICtcbiAgZ2VvbV90ZXh0X3JlcGVsKFxuICAgIGFlcyhsYWJlbCA9IGlzb2NvZGUpLFxuICAgIGJveC5wYWRkaW5nID0gMC41LFxuICAgIHBvaW50LnBhZGRpbmcgPSAwLjEsXG4gICAgZm9yY2UgPSA1XG4gICkgK1xuICBnZW9tX3Ntb290aChtZXRob2QgPSBcImxtXCIsIHNlID0gRkFMU0UsIGxpbmV0eXBlID0gXCJkYXNoZWRcIikgK1xuICBsYWJzKHggPSBcIkhhcmRzaGlwXCIsXG4gICAgICAgeSA9IFwiUmlzayBUYWtpbmdcIikgK1xuICB0aGVtZV9taW5pbWFsKCkgK1xuICB4bGltKC0yLCAyKSArXG4gIHlsaW0oLTAuNiwgMSkgK1xuICBjb29yZF9maXhlZChyYXRpbyA9IDIuNSlcbmBgYCJ9 -->

```r
library(ggrepel)
library(ggplot2)
#For WVS
ggplot(hardship_data_complete, aes(x = hardship, y = intercept, label = isocode)) +
  geom_point(size = 3) +
  geom_text_repel(
    aes(label = isocode),
    box.padding = 0.5,
    point.padding = 0.1,
    force = 5
  ) +
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed") +
  labs(x = "Hardship",
       y = "Risk Taking") +
  theme_minimal() +
  xlim(-2, 2) +
  ylim(-0.6, 1) +
  coord_fixed(ratio = 2.5)


<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxubGlicmFyeShnZ3JlcGVsKVxuXG5cbmxpYnJhcnkoZ2dyZXBlbClcbiNGb3IgV1ZTXG5nZ3Bsb3QoaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSwgYWVzKHggPSBoYXJkc2hpcCwgeSA9IHNsb3BlX2FnZSwgbGFiZWwgPSBpc29jb2RlKSkgK1xuICBnZW9tX3BvaW50KHNpemUgPSAzKSArXG4gIGdlb21fdGV4dF9yZXBlbChcbiAgICBhZXMobGFiZWwgPSBpc29jb2RlKSxcbiAgICBib3gucGFkZGluZyA9IDAuNSxcbiAgICBwb2ludC5wYWRkaW5nID0gMC4xLFxuICAgIGZvcmNlID0gNVxuICApICtcbiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gXCJsbVwiLCBzZSA9IEZBTFNFLCBsaW5ldHlwZSA9IFwiZGFzaGVkXCIpICtcbiAgbGFicyh4ID0gXCJIYXJkc2hpcFwiLFxuICAgICAgIHkgPSBcIkFnZSBFZmZlY3RcIikgK1xuICB0aGVtZV9taW5pbWFsKCkgK1xuICAgeGxpbSgtMiwgMikgK1xuICBjb29yZF9maXhlZChyYXRpbyA9IDgpXG4gXG5cblxuYGBgIn0= -->

```r
library(ggrepel)


library(ggrepel)
#For WVS
ggplot(hardship_data_complete, aes(x = hardship, y = slope_age, label = isocode)) +
  geom_point(size = 3) +
  geom_text_repel(
    aes(label = isocode),
    box.padding = 0.5,
    point.padding = 0.1,
    force = 5
  ) +
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed") +
  labs(x = "Hardship",
       y = "Age Effect") +
  theme_minimal() +
   xlim(-2, 2) +
  coord_fixed(ratio = 8)
 
library(ggrepel)

ggplot(hardship_data_complete, aes(x = hardship, y = intercept, label = isocode)) +
  geom_point(size = 3) +
  geom_text_repel(
    aes(label = isocode),
    box.padding = 0.5,
    point.padding = 0.1,
    force = 5
  ) +
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed") +
  labs(x = "Hardship",
       y = "Risk Taking") +
  theme_minimal() +
  coord_fixed()
# Output for linear model for hardship & risktaking

# Lineares Modell für den ersten Fall
model_intercept <- lm(hardship ~ intercept, data = hardship_data_complete)
# Zusammenfassung des Modells
summary_intercept <- summary(model_intercept)
# Zeige die vollständige Zusammenfassung an
print(summary_intercept)

# Correlation Hardship und Risk Taking

# Entferne Zeilen mit fehlenden Werten in den relevanten Spalten

# Berechne die Korrelation erneut
correlation <- cor(hardship_data_complete$hardship, hardship_data_complete$intercept)
# Zeige die Korrelation an
print(paste("Correlation Hardship und Risk Taking:", correlation))
# Output for linear model for hardship & risktaking

# Lineares Modell für den ersten Fall
model_intercept <- lm(hardship ~ slope_age, data = hardship_data_complete)
# Zusammenfassung des Modells
summary_intercept <- summary(model_intercept)
# Zeige die vollständige Zusammenfassung an
print(summary_intercept)

# Correlation Hardship und Risk Taking

# Entferne Zeilen mit fehlenden Werten in den relevanten Spalten

# Berechne die Korrelation erneut
correlation <- cor(hardship_data_complete$hardship, hardship_data_complete$slope_age)
# Zeige die Korrelation an
print(paste("Correlation Hardship und Risk Taking:", correlation))
# Output for linear model for hardship & risktaking

# Lineares Modell für den ersten Fall
model_intercept <- lm(hardship ~ slope_gender, data = hardship_data_complete)
# Zusammenfassung des Modells
summary_intercept <- summary(model_intercept)
# Zeige die vollständige Zusammenfassung an
print(summary_intercept)

# Correlation Hardship und Risk Taking

# Entferne Zeilen mit fehlenden Werten in den relevanten Spalten

# Berechne die Korrelation erneut
correlation <- cor(hardship_data_complete$hardship, hardship_data_complete$slope_gender)
# Zeige die Korrelation an
print(paste("Correlation Hardship und Risk Taking:", correlation))
WVS_data
# Lineares Modell für Risk Taking vs. Age
model_risk_age <- lm(Z_score_risktaking ~ z_score_age + factor(gender), data = WVS_data)

# Zusammenfassung des Modells
summary_risk_age <- summary(model_risk_age)

# Zeige die vollständige Zusammenfassung an
print(summary_risk_age)

# Berechne die Korrelation erneut
correlation <- cor(WVS_data$z_score_age, WVS_data$Z_score_risktaking, WVS_data$gender)
# Zeige die Korrelation an
print(paste("Correlation Hardship und Risk Taking:", correlation))
new_data
# Lineares Modell für Risk Taking vs. Age
model <- lm(slope_gender_gps ~ slope_gender_WVS, data = new_data)

# Zusammenfassung des Modells
summary_model <- summary(model)

# Zeige die vollständige Zusammenfassung an
print(summary_model)

# Berechne die Korrelation erneut
correlation <- cor(new_data$slope_age_gps, new_data$slope_age_WVS)
# Zeige die Korrelation an
print(paste("Correlation Hardship und Risk Taking:", correlation))
library(ggrepel)


library(ggrepel)

ggplot(hardship_data_complete, aes(x = hardship, y = slope_gender, label = isocode)) +
  geom_point(size = 3) +
  geom_text_repel(
    aes(label = isocode),
    box.padding = 0.5,
    point.padding = 0.1,
    force = 5
  ) +
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed") +
  labs(x = "Hardship",
       y = "Gender Effect") +
  theme_minimal() +
   xlim(-2, 2) +
  coord_fixed(ratio = 6)
 
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpWYXJpYWJsZXM6IAoKUmlzawpBZ2UgClNleApDb3VudHJ5CgoKYGBge3J9CmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeSh0aWR5cikKbGlicmFyeShtYXBzKQpsaWJyYXJ5KGhhdmVuKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZHBseXIpCgpgYGAKCiNyZWFkIHRoZSBkYXRhIChXYXZlIDUpCmBgYHtyfQojIERhdGEgb2YgV2F2ZSA1CgoKV1Y1X2RhdGEgPC0gcmVhZFJEUygiL1VzZXJzL2NyaXN0aW5hY2FuZGlkby9Eb2N1bWVudHMvR2l0aHViL3Jpc2tfd3ZzL2RhdGEvV1ZTL0YwMDAwNzk0NC1XVjVfRGF0YV9SX3YyMDE4MDkxMi5yZHMiKQoKCiMgQ29udmVydCBXVjVfZGF0YS1vYmplY3QgaW4gZGF0YS5mcmFtZSAKV1Y1X2RhdGFfZGYgPC0gYXMuZGF0YS5mcmFtZShXVjVfZGF0YSkKCiMgc2hvdyBmaXJzdCBmaXZlIGNvbHVtbnMKV1Y1X2RhdGFfZGYKYGBgCgojIGNsZWFuIHRoZSBkYXRhIHNldApgYGB7cn0KbGlicmFyeShkcGx5cikKCiNyZW5hbWUgdGhlIHZhcmlhYmxlcwpXVjVfZGF0YSA8LSBXVjVfZGF0YV9kZiAlPiUKICByZW5hbWUoZ2VuZGVyID0gVjIzNSwgYWdlID0gVjIzNywgY291bnRyeV9jb2RlID0gVjIsIHdhdmUgPSBWMSwgcmlza3Rha2luZyA9IFY4NikKV1Y1X2RhdGEKCmNvbG5hbWVzKFdWNV9kYXRhKQoKCgojc2VsZWN0IG9ubHkgdGhlIHZhcmlhYmxlcyBvZiBpbnRlcmVzdApXVjVfZGF0YSA8LSBXVjVfZGF0YSAlPiUKICBkcGx5cjo6c2VsZWN0KGdlbmRlciwgYWdlLCBjb3VudHJ5X2NvZGUsIHdhdmUsIHJpc2t0YWtpbmcpCldWNV9kYXRhCgpgYGAKCmBgYHtyfQojIFJlYWQgY291bnRyeW5hbWVzIGRhdGEgZnJvbSB0aGUgQ1NWIGZpbGUgKHRvIGRlY29kZSB0aGUgZGF0YXNldCA1KQpjb3VudHJ5bmFtZXMgPC0gcmVhZC5jc3YoIi9Vc2Vycy9jcmlzdGluYWNhbmRpZG8vRG9jdW1lbnRzL0dpdGh1Yi9yaXNrX3d2cy9kYXRhL1dWUy9jb3VudHJ5bmFtZXMudHh0IiwgaGVhZGVyID0gRkFMU0UsIGFzLmlzID0gVFJVRSkKY29sbmFtZXMoY291bnRyeW5hbWVzKSA8LSBjKCJjb2RlIiwgIm5hbWUiKQoKIyBBc3N1bWluZyBXVjVfZGF0YSBoYXMgYSBjb2x1bW4gbmFtZWQgY291bnRyeV9jb2RlCldWNV9kYXRhJGNvdW50cnkgPC0gY291bnRyeW5hbWVzJG5hbWVbbWF0Y2goV1Y1X2RhdGEkY291bnRyeV9jb2RlLCBjb3VudHJ5bmFtZXMkY29kZSldCgojIENoZWNrIHRoZSBmcmVxdWVuY3kgb2YgZWFjaCBjb3VudHJ5IGluIHRoZSBuZXcgY29sdW1uCnRhYmxlKFdWNV9kYXRhJGNvdW50cnkpCgojIERpc3BsYXkgdGhlIHVwZGF0ZWQgV1Y1X2RhdGEKcHJpbnQoV1Y1X2RhdGEpCgoKCgojUmVhZCBEYXRhc2V0IChXYXZlIDYpCgpXVjZfZGF0YSA8LSBsb2FkKCIvVXNlcnMvY3Jpc3RpbmFjYW5kaWRvL0RvY3VtZW50cy9HaXRodWIvcmlza193dnMvZGF0YS9XVlMvV1Y2X0RhdGFfUl92MjAyMDExMTcucmRhdGEiKSAKV1Y2X2RhdGEgPC0gV1Y2X0RhdGFfUl92MjAyMDExMTcgCnByaW50KFdWNl9kYXRhKQpgYGAKCiNyZW5hbWUgdmFyaWFibGVzCmBgYHtyfQpXVjZfZGF0YSA8LSBXVjZfZGF0YSAlPiUKICByZW5hbWUod2F2ZSA9IFYxLCBnZW5kZXIgPSBWMjQwLCBhZ2UgPSBWMjQyLGNvdW50cnlfY29kZSA9IFYyLCByaXNrdGFraW5nID0gVjc2ICkKCgojc2VsZWN0IG9ubHkgdGhlIHZhcmlhYmxlcyBvZiBpbnRlcmVzdAoKV1Y2X2RhdGEgPC0gV1Y2X2RhdGEgJT4lCiAgZHBseXI6OnNlbGVjdCh3YXZlLCBnZW5kZXIsIGFnZSwgY291bnRyeV9jb2RlLHJpc2t0YWtpbmcpCldWNl9kYXRhCgpgYGAKCgojZGVjb2RlIGRhcmFzZXQgKFdhdmUgNikKYGBge3J9CmNvdW50cnluYW1lcyA9IHJlYWQuY3N2KCIvVXNlcnMvY3Jpc3RpbmFjYW5kaWRvL0RvY3VtZW50cy9HaXRodWIvcmlza193dnMvZGF0YS9XVlMvY291bnRyeW5hbWVzLnR4dCIsIGhlYWRlcj1GQUxTRSxhcy5pcz1UUlVFKQpjb2xuYW1lcyhjb3VudHJ5bmFtZXMpID0gYygiY29kZSIsICJuYW1lIikKV1Y2X2RhdGEkY291bnRyeSA9IGNvdW50cnluYW1lcyRuYW1lIFttYXRjaChXVjZfZGF0YSRjb3VudHJ5X2NvZGUsIGNvdW50cnluYW1lcyRjb2RlKV0KdGFibGUoV1Y2X2RhdGEkY291bnRyeSkKV1Y2X2RhdGEKYGBgCgojY29tYmluZSB0aGUgMiBkYXRhc2V0IChXYXZlIDYgKyBXYXZlIDUpCmBgYHtyfQpXVjVfZGF0YQpXVjZfZGF0YQpXVlNfZGF0YSA9IHJiaW5kKFdWNV9kYXRhLCBXVjZfZGF0YSkKV1ZTX2RhdGEKCgoKCgpgYGAKI2V4Y2x1c2lvbiBvZiBwYXJ0aWNpcGFudHMgYW5kIG9taXNzaW9uIG9mIG1pc3NpbmcgZGF0YSAobmEpCmBgYHtyfQpXVlNfZGF0YSA9IHN1YnNldChXVlNfZGF0YSwgcmlza3Rha2luZyA+IDAgJiBnZW5kZXIgPiAwICYgYWdlID4wICkKZGF0YV9XYXZlNSA9IHN1YnNldChXVjVfZGF0YSwgcmlza3Rha2luZyA+IDAgJiBnZW5kZXIgPiAwICYgYWdlID4wICkKZGF0YV9XYXZlNiA9IHN1YnNldChXVjZfZGF0YSwgcmlza3Rha2luZyA+IDAgJiBnZW5kZXIgPiAwICYgYWdlID4wKQpXVlNfZGF0YSA8LSBuYS5vbWl0KFdWU19kYXRhKQpkYXRhX1dhdmU1IDwtIG5hLm9taXQoZGF0YV9XYXZlNSkKZGF0YV9XYXZlNiA8LSBuYS5vbWl0KGRhdGFfV2F2ZTYpCgoKIyBVc2UgdGhlIG11dGF0ZSBmdW5jdGlvbiB0byBjaGFuZ2UgdGhlIGNvdW50cnkgbmFtZQpXVlNfZGF0YSA8LSBXVlNfZGF0YSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGlmZWxzZShjb3VudHJ5ID09ICJHcmVhdCBCcml0YWluIiwgIlVuaXRlZCBLaW5nZG9tIiwgY291bnRyeSkpCmBgYApgYGB7cn0KIyBUcmFuc2Zyb20gcmlzayBpdGVtIHN1Y2ggdGhhdCBoaWdoIHZhbHVlcyByZXByZXNlbnQgbW9yZSByaXNrIHRha2luZwpXVlNfZGF0YSRyaXNrdGFraW5nID0gNiAtIFdWU19kYXRhJHJpc2t0YWtpbmcgKyAxCgogIAojIFRyYW5zZm9ybSByaXNrIHZhcmlhYmxlIGludG8gVC1zY29yZSAobWVhbiA9IDUwLCBzZCA9IDEwKQpXVlNfZGF0YSRUX3Njb3JlX3Jpc2t0YWtpbmcgPSAxMCpzY2FsZShXVlNfZGF0YSRyaXNrdGFraW5nLCBjZW50ZXI9VFJVRSxzY2FsZT1UUlVFKSs1MAoKV1ZTX2RhdGEKCiNUcmFuc2Zvcm0gcmlzayB2YXJpYWJsZSBpbnRvIFogc2NvcmUgCgojIEFzc3VtaW5nIFQtc2NvcmVzIGhhdmUgYSBtZWFuIG9mIDUwIGFuZCBhIHN0YW5kYXJkIGRldmlhdGlvbiBvZiAxMApXVlNfZGF0YSRaX3Njb3JlX3Jpc2t0YWtpbmcgPSAoV1ZTX2RhdGEkVF9zY29yZV9yaXNrdGFraW5nIC0gNTApIC8gMTAKCiMgUHJpbnQgdGhlIHJlc3VsdGluZyBkYXRhIGZyYW1lCnByaW50KFdWU19kYXRhKQoKV1ZTX2RhdGEgPC0gV1ZTX2RhdGEgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgbXV0YXRlKHpfc2NvcmVfYWdlID0gc2NhbGUoYWdlKSkKV1ZTX2RhdGEKCgoKCgoKYGBgCiNXb3JsZCBtYXAgCmBgYHtyfQp3b3JsZF9tYXAgPC0gbWFwX2RhdGEoIndvcmxkIikKcmVjb3JkZWRfY291bnRyaWVzIDwtIHVuaXF1ZShXVlNfZGF0YSRjb3VudHJ5KQp3b3JsZF9tYXAkcmVjb3JkZWQgPC0gaWZlbHNlKHdvcmxkX21hcCRyZWdpb24gJWluJSByZWNvcmRlZF9jb3VudHJpZXMsICJSZWNvcmRlZCIsICJOb3QgUmVjb3JkZWQiKQoKZ2dwbG90KHdvcmxkX21hcCwgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwLCBmaWxsID0gcmVjb3JkZWQpKSArIAogIGdlb21fcG9seWdvbihjb2xvciA9ICJ3aGl0ZSIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJSZWNvcmRlZCIgPSAicmVkIiwgIk5vdCBSZWNvcmRlZCIgPSAibGlnaHRncmV5IiksIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWVfdm9pZCgpICsKICBsYWJzKHRpdGxlID0gIldWUyIsIGZpbGwgPSAiU3RhdHVzIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCgpgYGAKCmBgYHtyfQojIExvYWQgdGhlIGRwbHlyIHBhY2thZ2UKbGlicmFyeShkcGx5cikKCiMgQXNzdW1pbmcgdGhlIGRhdGEgZnJhbWUgaXMgY2FsbGVkICdkYXRhJyBhbmQgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBjb3VudHJ5IGluZm9ybWF0aW9uIGlzIGNhbGxlZCAnY291bnRyeScKY291bnRyeV9jb3VudHMgPC0gV1ZTX2RhdGEgJT4lCiAgY291bnQoY291bnRyeSkKCiMgUHJpbnQgdGhlIHJlc3VsdApwcmludChjb3VudHJ5X2NvdW50cykKCmBgYAoKYGBge3J9CiMgcmVhZCBpbiBmaWxlIHRoYXQgY29udGFpbnMgaGFyZHNoaXAgaW5kaWNhdG9ycyBtYW51YWxseSBjb2xsZWN0ZWQgZnJvbSBDSUEgZmFjdGJvb2ssIFdITywgYW5kIFdvcmxkIEJhbmsgCiMgKHNlZSBTdXBwbGVtZW50YWwgTWF0ZXJpYWxzIGZvciBVUkwgc291cmNlcykKY291bnRyeWZhY3RzID0gcmVhZC5jc3YoIi9Vc2Vycy9jcmlzdGluYWNhbmRpZG8vRG9jdW1lbnRzL0dpdGh1Yi9yaXNrX3d2cy9kYXRhL1dWUy9jb3VudHJ5ZmFjdHNfc2VsZWN0aW9uLmNzdiIsIGFzLmlzID0gVFJVRSwgaGVhZGVyID0gVFJVRSkgCgojIENyZWF0ZSBhIHZlY3RvciBvZiBsYWJlbHMgd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluICdjb3VudHJ5ZmFjdHMnCmxhYmVscyA8LSBjKCJjb2RlIiwiY291bnRyeSIsImNvZGVXVlMiLCJIb21pY2lkZSIsIkdEUCIsIkluZk1vcnQiLCJMaWZlRXhwIiwiR0lOSSIsIkdlbmRlclBFZHUiLCJjb2RlMiIpCgoKCgojIFByaW50IHRoZSByZXN1bHQKcHJpbnQoY291bnRyeWZhY3RzKQpgYGAKYGBge3J9CiMgTG9hZCB0aGUgZHBseXIgcGFja2FnZSBpZiBub3QgYWxyZWFkeSBsb2FkZWQKaWYgKCFyZXF1aXJlKGRwbHlyKSkgewogIGluc3RhbGwucGFja2FnZXMoImRwbHlyIikKICBsaWJyYXJ5KGRwbHlyKQp9CgojIENyZWF0ZSB0aGUgJ2hhcmRzaGlwJyBjb2x1bW4gaW4gdGhlICdjb3VudHJ5ZmFjdHMnIGRhdGEgZnJhbWUKY291bnRyeWZhY3RzIDwtIGNvdW50cnlmYWN0cyAlPiUKICBtdXRhdGUoaGFyZHNoaXAgPSAoaG9taWNpZGVyYXRlICsgZ2RwICsgaW5mYW50bW9ydGFsaXR5ICsgbGlmZWV4cGVjdGFuY3kgKyBnaW5pICsgZmVtYWxlbWFsZV9wcmltZWR1KSAvIDYpCmNvdW50cnlmYWN0cwoKCgojIFZpZXcgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgJ2hhcmRzaGlwX2luZGV4JyBjb2x1bW4gZm9yIGVhY2ggY291bnRyeQpoYXJkc2hpcF9pbmRleF9kaXN0cmlidXRpb24gPC0gY291bnRyeWZhY3RzICU+JQogIGdyb3VwX2J5KGxhYmVsKSAlPiUKICBzdW1tYXJpemUoCiAgICBtZWFuID0gbWVhbihoYXJkc2hpcCwgbmEucm0gPSBUUlVFKSwKICAgIG1lZGlhbiA9IG1lZGlhbihoYXJkc2hpcCwgbmEucm0gPSBUUlVFKSwKICAgIHNkID0gc2QoaGFyZHNoaXAsIG5hLnJtID0gVFJVRSksCiAgICBtaW4gPSBtaW4oaGFyZHNoaXAsIG5hLnJtID0gVFJVRSksCiAgICBtYXggPSBtYXgoaGFyZHNoaXAsIG5hLnJtID0gVFJVRSksCiAgICBuID0gc3VtKCFpcy5uYShoYXJkc2hpcCkpCiAgKQoKIyBQcmludCB0aGUgcmVzdWx0CnByaW50KGhhcmRzaGlwX2luZGV4X2Rpc3RyaWJ1dGlvbikKYGBgCgojdGFibGUgd2l0aCBmZW1hbGUgcGVyY2VudGFnZSwgbWVhbiBhZ2UsIG1lYW4gcmlzayB0YWtpbmcgcGVyIGNvdW50cmllcyAoc3VtbWFyeSBvZiB0aGUgY291bnRyaWVzKQpgYGB7cn0KbGlicmFyeShkcGx5cikKCnRhYmxlX2RhdGFfV1ZTIDwtIFdWU19kYXRhICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIHN1bW1hcmlzZSgKICAgIG4gPSBuKCksCiAgICBmZW1hbGVfcGVyY2VudGFnZSA9IG1lYW4oZ2VuZGVyID09IDEpICogMTAwLAogICAgbWVhbl9hZ2UgPSBtZWFuKGFnZSwgbmEucm0gPSBUUlVFKSwKICAgIGFnZV9yYW5nZSA9IHBhc3RlKG1pbihhZ2UsIG5hLnJtID0gVFJVRSksICItIiwgbWF4KGFnZSwgbmEucm0gPSBUUlVFKSksCiAgICBtZWFuX3Jpc2t0YWtpbmcgPSBtZWFuKFpfc2NvcmVfcmlza3Rha2luZywgbmEucm0gPSBUUlVFKQogICkKCnRhYmxlX2RhdGFfV1ZTCmBgYApgYGB7cn0KI2dyYXBoIGFjcm9zcyBjb3VudHJpZXM6IHJpc2sgdGFraW5nIHZzIGFnZSB2cyBnZW5kZXIgKFotc2NvcmUgZm9yIGFnZSBhbmQgcmlzayB0YWtpbmcpICAgCgoKIyBSaXNrIHZzIGFnZSB3aXRoIGNvbG9yLWNvZGVkIGdlbmRlciBwZXIgQ291bnRyeQojIFJpc2sgdnMgYWdlIHdpdGggY29sb3ItY29kZWQgZ2VuZGVyIHBlciBDb3VudHJ5CiMgU2thbGllcnVuZyBkZXMgWi1TY29yZXMgZsO8ciBkYXMgQWx0ZXIgYW5wYXNzZW4KV1ZTX2RhdGEkel9zY29yZV9hZ2Vfc2NhbGVkIDwtIDE1ICogV1ZTX2RhdGEkel9zY29yZV9hZ2UgKyA0MgoKCmdncGxvdChXVlNfZGF0YSwgYWVzKHpfc2NvcmVfYWdlX3NjYWxlZCwgWl9zY29yZV9yaXNrdGFraW5nLCBjb2xvciA9IGFzLmZhY3RvcihnZW5kZXIpKSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXIod2lkdGggPSAwLjEsIGhlaWdodCA9IDAuMSksIHNpemUgPSAwLjEpICsgIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSA0MiwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMSkgKyAgCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImJsdWUiLCAicmVkIiksIGxhYmVscyA9IGMoIk1hbGUiLCAiRmVtYWxlIikpICsKICBsYWJzKGNvbG9yID0gIkdlbmRlciIpICsKICB4bGFiKCJBZ2UiKSArCiAgeWxhYigiUmlzayBUYWtpbmciKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxMDAsIGJ5ID0gMTUpLCBsaW1pdHMgPSBjKDAsIDEwMCkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQoKCgpXVlNfZGF0YQoKCgoKCgoKCgpgYGAKCgpgYGB7cn0KI3JlZ3Jlc3Npb24gdGFibGUgKHJpc2sgdGFraW5nIGFuZCBhZ2UgLT4gWi1zY29yZSkKCnJlZ3Jlc3Npb25fcmVzdWx0c19XVlMgPC0gV1ZTX2RhdGEgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgZG8obW9kZWwgPSBsbShaX3Njb3JlX3Jpc2t0YWtpbmcgfiBzY2FsZShhZ2UpICsgZ2VuZGVyLCBkYXRhID0gLikpICU+JQogIHN1bW1hcml6ZSgKICAgIGNvdW50cnkgPSBmaXJzdChjb3VudHJ5KSwKICAgIGludGVyY2VwdCA9IGNvZWYoc3VtbWFyeShtb2RlbCkpWzEsIDFdLAogICAgc2xvcGVfYWdlID0gY29lZihzdW1tYXJ5KG1vZGVsKSlbMiwgMV0sCiAgICBzbG9wZV9nZW5kZXIgPSBjb2VmKHN1bW1hcnkobW9kZWwpKVszLCAxXQogICkKCnJlZ3Jlc3Npb25fcmVzdWx0c19XVlMKCgpgYGAKCgpgYGB7cn0KZ3BzX2RhdGEgPC0gaGF2ZW46OnJlYWRfZHRhKCIvVXNlcnMvY3Jpc3RpbmFjYW5kaWRvL0RvY3VtZW50cy9HaXRodWIvcmlza193dnMvZGF0YS9pbmRpdmlkdWFsX25ldy5kdGEiKQoKZ3BzX2RhdGEKYGBgCmBgYHtyfQojIENsZWFuIHRoZSBkYXRhIGJ5IHJlbW92aW5nIHJlY29yZHMgd2l0aCBtaXNzaW5nIHZhbHVlcwpncHNfZGF0YSA8LSBncHNfZGF0YSAlPiUKICBkcm9wX25hKGNvdW50cnksIGlzb2NvZGUsIHJpc2t0YWtpbmcsIGdlbmRlciwgYWdlKQoKCgojIERpc3BsYXkgdGhlIGNsZWFuZWQgZGF0YQpncHNfZGF0YQpgYGAKYGBge3J9CiNzZWxlY3Qgb25seSB0aGUgdmFyaWFibGVzIG9mIGludGVyZXN0Cmdwc19kYXRhIDwtIGdwc19kYXRhICU+JQogIGRwbHlyOjpzZWxlY3QoY291bnRyeSwgaXNvY29kZSwgaXNvbiwgcmlza3Rha2luZywgZ2VuZGVyLCBhZ2UpCmdwc19kYXRhCmBgYApgYGB7cn0KI1otc2NvcmUgZm9yIGFnZSAKZ3BzX2RhdGEgPC0gZ3BzX2RhdGEgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgbXV0YXRlKHpfc2NvcmVfYWdlID0gc2NhbGUoYWdlKSkKCiMgRGlzcGxheSB0aGUgbmV3IGNvbHVtbiB3aXRoIFotU2NvcmVzIHBlciBDb3VudHJ5Cmdwc19kYXRhCmBgYAojdGFibGUgaW50ZXJjZXB0IGFuZCBzbG9wZSAKYGBge3J9CnJlZ3Jlc3Npb25fcmVzdWx0c19ncHMgPC0gZ3BzX2RhdGEgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgZG8obW9kZWwgPSBsbShyaXNrdGFraW5nIH4gel9zY29yZV9hZ2UgKyBnZW5kZXIsIGRhdGEgPSAuKSkgJT4lCiAgc3VtbWFyaXplKAogICAgY291bnRyeSA9IGZpcnN0KGNvdW50cnkpLAogICAgaW50ZXJjZXB0ID0gY29lZihzdW1tYXJ5KG1vZGVsKSlbMSwgMV0sCiAgICBzbG9wZV9hZ2UgPSBjb2VmKHN1bW1hcnkobW9kZWwpKVsyLCAxXSwKICAgIHNsb3BlX2dlbmRlciA9IGNvZWYoc3VtbWFyeShtb2RlbCkpWzMsIDFdCiAgKQoKcmVncmVzc2lvbl9yZXN1bHRzX2dwcwpgYGAKYGBge3J9CmNvbW1vbl9jb3VudHJpZXMgPC0gaW50ZXJzZWN0KFdWU19kYXRhJGNvdW50cnksIGdwc19kYXRhJGNvdW50cnkpCnNlbGVjdGVkX2NvdW50cmllcyA8LSBjKCJBcmdlbnRpbmEiLCAiQXVzdHJhbGlhIiwgIkJyYXppbCIsICJDYW5hZGEiLCAiQ2hpbGUiLCAiQ2hpbmEiLCAiRWd5cHQiLCAiRmlubGFuZCIsICJGcmFuY2UiLCAiR2VvcmdpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiR2VybWFueSIsICJHaGFuYSIsICJIdW5nYXJ5IiwgIkluZGlhIiwgIkluZG9uZXNpYSIsICJJcmFuIiwgIkphcGFuIiwgIkpvcmRhbiIsICJNZXhpY28iLCAiTW9sZG92YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiTW9yb2NjbyIsICJOZXRoZXJsYW5kcyIsICJQZXJ1IiwgIlBvbGFuZCIsICJSb21hbmlhIiwgIlJ1c3NpYSIsICJSd2FuZGEiLCAiU291dGggQWZyaWNhIiwgIlNvdXRoIEtvcmVhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJTcGFpbiIsICJTd2VkZW4iLCAiU3dpdHplcmxhbmQiLCAiVGhhaWxhbmQiLCAiVHVya2V5IiwgIlVrcmFpbmUiLCAiVW5pdGVkIFN0YXRlcyIsICJBbGdlcmlhIiwgIkNvbG9tYmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJFc3RvbmlhIiwgIkhhaXRpIiwgIklyYXEiLCAiS2F6YWtoc3RhbiIsICJOaWdlcmlhIiwgIlBha2lzdGFuIiwgIlBoaWxpcHBpbmVzIiwgIlppbWJhYndlIiwgIlVuaXRlZCBLaW5nZG9tIikKCiMgRmlsdGVyIHRoZSBvcmlnaW5hbCBkYXRhc2V0Cm5ld19XVlMgPC0gV1ZTX2RhdGFbV1ZTX2RhdGEkY291bnRyeSAlaW4lIHNlbGVjdGVkX2NvdW50cmllcywgXQoKIyBWaWV3IHRoZSBuZXcgZGF0YXNldApuZXdfV1ZTCgoKYGBgCgpgYGB7cn0KCnNlbGVjdGVkX2NvdW50cmllcyA8LSBjKCJBcmdlbnRpbmEiLCAiQXVzdHJhbGlhIiwgIkJyYXppbCIsICJDYW5hZGEiLCAiQ2hpbGUiLCAiQ2hpbmEiLCAiRWd5cHQiLCAiRmlubGFuZCIsICJGcmFuY2UiLCAiR2VvcmdpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiR2VybWFueSIsICJHaGFuYSIsICJIdW5nYXJ5IiwgIkluZGlhIiwgIkluZG9uZXNpYSIsICJJcmFuIiwgIkphcGFuIiwgIkpvcmRhbiIsICJNZXhpY28iLCAiTW9sZG92YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiTW9yb2NjbyIsICJOZXRoZXJsYW5kcyIsICJQZXJ1IiwgIlBvbGFuZCIsICJSb21hbmlhIiwgIlJ1c3NpYSIsICJSd2FuZGEiLCAiU291dGggQWZyaWNhIiwgIlNvdXRoIEtvcmVhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJTcGFpbiIsICJTd2VkZW4iLCAiU3dpdHplcmxhbmQiLCAiVGhhaWxhbmQiLCAiVHVya2V5IiwgIlVrcmFpbmUiLCAiVW5pdGVkIFN0YXRlcyIsICJBbGdlcmlhIiwgIkNvbG9tYmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJFc3RvbmlhIiwgIkhhaXRpIiwgIklyYXEiLCAiS2F6YWtoc3RhbiIsICJOaWdlcmlhIiwgIlBha2lzdGFuIiwgIlBoaWxpcHBpbmVzIiwgIlppbWJhYndlIiwgIlVuaXRlZCBLaW5nZG9tIikKCiMgRmlsdGVyIHRoZSBvcmlnaW5hbCBkYXRhc2V0Cm5ld19ncHMgPC0gZ3BzX2RhdGFbZ3BzX2RhdGEkY291bnRyeSAlaW4lIHNlbGVjdGVkX2NvdW50cmllcywgXQoKIyBWaWV3IHRoZSBuZXcgZGF0YXNldApuZXdfZ3BzCgpgYGAKYGBge3J9CnJlZ3Jlc3Npb25fcmVzdWx0c19XVlNfbmV3IDwtIG5ld19XVlMgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgZG8obW9kZWwgPSBsbShaX3Njb3JlX3Jpc2t0YWtpbmcgfiBzY2FsZShhZ2UpICsgZ2VuZGVyLCBkYXRhID0gLikpICU+JQogIHN1bW1hcml6ZSgKICAgIGNvdW50cnkgPSBmaXJzdChjb3VudHJ5KSwKICAgIGludGVyY2VwdF9XVlMgPSBjb2VmKHN1bW1hcnkobW9kZWwpKVsxLCAxXSwKICAgIHNsb3BlX2FnZV9XVlMgPSBjb2VmKHN1bW1hcnkobW9kZWwpKVsyLCAxXSwKICAgIHNsb3BlX2dlbmRlcl9XVlMgPSBjb2VmKHN1bW1hcnkobW9kZWwpKVszLCAxXQogICkKCnJlZ3Jlc3Npb25fcmVzdWx0c19XVlNfbmV3CgpgYGAKYGBge3J9CnJlZ3Jlc3Npb25fcmVzdWx0c19ncHNfbmV3IDwtIG5ld19ncHMgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgZG8obW9kZWwgPSBsbShyaXNrdGFraW5nIH4gc2NhbGUoYWdlKSArIGdlbmRlciwgZGF0YSA9IC4pKSAlPiUKICBzdW1tYXJpemUoCiAgICBjb3VudHJ5ID0gZmlyc3QoY291bnRyeSksCiAgICBpbnRlcmNlcHRfZ3BzID0gY29lZihzdW1tYXJ5KG1vZGVsKSlbMSwgMV0sCiAgICBzbG9wZV9hZ2VfZ3BzID0gY29lZihzdW1tYXJ5KG1vZGVsKSlbMiwgMV0sCiAgICBzbG9wZV9nZW5kZXJfZ3BzID0gY29lZihzdW1tYXJ5KG1vZGVsKSlbMywgMV0KICApCgpyZWdyZXNzaW9uX3Jlc3VsdHNfZ3BzX25ldwoKYGBgCmBgYHtyfQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShkcGx5cikgICMgRG9uJ3QgZm9yZ2V0IHRvIGxvYWQgdGhlIGRwbHlyIHBhY2thZ2UKCnJlZ3Jlc3Npb25fcmVzdWx0c19ncHNfbmV3CnJlZ3Jlc3Npb25fcmVzdWx0c19XVlNfbmV3CgojIEFzc3VtaW5nICJjb3VudHJ5IiBpcyB0aGUgY29tbW9uIGNvbHVtbgptZXJnZWRfcmVzdWx0cyA8LSBtZXJnZShyZWdyZXNzaW9uX3Jlc3VsdHNfZ3BzX25ldywgcmVncmVzc2lvbl9yZXN1bHRzX1dWU19uZXcsIGJ5ID0gImNvdW50cnkiLCBhbGwgPSBUUlVFKQoKIyBSZWFkIGRhdGEgZnJvbSB0aGUgRXhjZWwgZmlsZQpuZXdfZGF0YSA8LSByZWFkX2V4Y2VsKCIvVXNlcnMvY3Jpc3RpbmFjYW5kaWRvL0RvY3VtZW50cy9HaXRodWIvcmlza193dnMvZGF0YS9IYXJkc2hpcF9jb21wbGV0ZS54bHN4IikKCiMgTm93IHlvdSBjYW4gd29yayB3aXRoIHRoZSAnbmV3X2RhdGEnIG9iamVjdApwcmludChuZXdfZGF0YSkKCiMgUGVyZm9ybSB0aGUgbGVmdF9qb2luIG9wZXJhdGlvbgpuZXdfZGF0YSA8LSBsZWZ0X2pvaW4obWVyZ2VkX3Jlc3VsdHMsIG5ld19kYXRhLCBieSA9ICJjb3VudHJ5IikKCiMgU2VsZWN0IHNwZWNpZmljIGNvbHVtbnMKbmV3X2RhdGEgPC0gbmV3X2RhdGEgJT4lCiAgZHBseXI6OnNlbGVjdChjb3VudHJ5LCBpbnRlcmNlcHRfZ3BzLCBzbG9wZV9hZ2VfZ3BzLCBzbG9wZV9nZW5kZXJfZ3BzLCBpbnRlcmNlcHRfV1ZTLCBzbG9wZV9hZ2VfV1ZTLCBzbG9wZV9nZW5kZXJfV1ZTLCBpc29jb2RlKQoKIyBQcmludCB0aGUgZmluYWwgZGF0YQpwcmludChuZXdfZGF0YSkKCmhhcmRzaGlwX2luZGV4IDwtIHJlYWRfZXhjZWwoIi9Vc2Vycy9jcmlzdGluYWNhbmRpZG8vRG9jdW1lbnRzL0dpdGh1Yi9yaXNrX3d2cy9kYXRhL0hhcmRzaGlwX2NvbXBsZXRlLnhsc3giKQpwcmludChoYXJkc2hpcF9pbmRleCkKCgpoYXJkc2hpcF9kYXRhX2NvbXBsZXRlIDwtIGxlZnRfam9pbihyZWdyZXNzaW9uX3Jlc3VsdHNfV1ZTLCBoYXJkc2hpcF9pbmRleCwgYnkgPSAiY291bnRyeSIpCmhhcmRzaGlwX2RhdGFfY29tcGxldGUKCgoKYGBgCgoKIyBsb2cgdHJhbnNmb3JtCmBgYHtyfQpoYXJkc2hpcF9kYXRhX2NvbXBsZXRlJG1lYW5faG9taWNpZGU9bG9nKGhhcmRzaGlwX2RhdGFfY29tcGxldGUkbWVhbl9ob21pY2lkZSkKaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSRnZHA9bG9nKGhhcmRzaGlwX2RhdGFfY29tcGxldGUkZ2RwKQpoYXJkc2hpcF9kYXRhX2NvbXBsZXRlJEluZmFudF9tb3J0YWxpdHk9bG9nKGhhcmRzaGlwX2RhdGFfY29tcGxldGUkSW5mYW50X21vcnRhbGl0eSkKaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSRsaWZlX2V4cGVjdD1sb2coaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSRsaWZlX2V4cGVjdCkKaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSRnaW5pX2luY29tZT1sb2coaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSRnaW5pX2luY29tZSkKCgojIGNoYW5naW5nIHZhcmlhYmxlcyBpbnRvIHRoZSBzYW1lIGRpcmVjdGlvbgoKIyBSZXZlcnNlIENvZGllcnVuZwpoYXJkc2hpcF9kYXRhX2NvbXBsZXRlJG1lYW5faG9taWNpZGU9c2NhbGUoaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSRtZWFuX2hvbWljaWRlKQpoYXJkc2hpcF9kYXRhX2NvbXBsZXRlJGdkcD1zY2FsZSgtaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSRnZHApCmhhcmRzaGlwX2RhdGFfY29tcGxldGUkSW5mYW50X21vcnRhbGl0eT1zY2FsZShoYXJkc2hpcF9kYXRhX2NvbXBsZXRlJEluZmFudF9tb3J0YWxpdHkpCmhhcmRzaGlwX2RhdGFfY29tcGxldGUkbGlmZV9leHBlY3Q9c2NhbGUoLWhhcmRzaGlwX2RhdGFfY29tcGxldGUkbGlmZV9leHBlY3QpCmhhcmRzaGlwX2RhdGFfY29tcGxldGUkZ2luaV9pbmNvbWU9c2NhbGUoaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSRnaW5pX2luY29tZSkKaGFyZHNoaXBfZGF0YV9jb21wbGV0ZQpgYGAKCiMgY3JlYXRlIGEgaGFyZHNoaXAgaW5kZXgKYGBge3J9CmhhcmRzaGlwX2RhdGFfY29tcGxldGUkaGFyZHNoaXA9KGhhcmRzaGlwX2RhdGFfY29tcGxldGUkbWVhbl9ob21pY2lkZStoYXJkc2hpcF9kYXRhX2NvbXBsZXRlJGdkcCtoYXJkc2hpcF9kYXRhX2NvbXBsZXRlJGdpbmlfaW5jb21lK2hhcmRzaGlwX2RhdGFfY29tcGxldGUkbGlmZV9leHBlY3QraGFyZHNoaXBfZGF0YV9jb21wbGV0ZSRJbmZhbnRfbW9ydGFsaXR5KS81CgpoYXJkc2hpcF9kYXRhX2NvbXBsZXRlCgpgYGAKYGBge3J9CiMgUGxvdHRpbmcgY29tcGFyaW5nIGludGVyZWNlcHRzCmdncGxvdChuZXdfZGF0YSwgYWVzKHggPSBpbnRlcmNlcHRfZ3BzLCB5ID0gaW50ZXJjZXB0X1dWUywgbGFiZWwgPSBpc29jb2RlKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDEuNSkgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBpc29jb2RlKSwgdmp1c3QgPSAtMC41LCBoanVzdCA9IC0wLjUpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IEZBTFNFLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgbGFicyh0aXRsZSA9ICJDb21wYXJpc29uIG9mIEludGVyY2VwdCBWYWx1ZXMiLAogICAgICAgeCA9ICJJbnRlcmNlcHRfZ3BzIiwKICAgICAgIHkgPSAiSW50ZXJjZXB0X1dWUyIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHhsaW0oYygwLCAxLjIpKSArCiAgeWxpbShjKDAsIDEuMikpICsKICBjb29yZF9maXhlZCgpCgojIEFzc3VtaW5nIHlvdSBoYXZlIGEgZGF0YSBmcmFtZSBuYW1lZCAnbmV3X2RhdGEnIHdpdGggY29sdW1ucyAnaW50ZXJjZXB0X2dwcycsICdpbnRlcmNlcHRfV1ZTJywgYW5kICdpc29jb2RlJwoKIyBJbnN0YWxsIGFuZCBsb2FkIHRoZSBuZWNlc3NhcnkgcGFja2FnZXMKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGdncmVwZWwpCmxpYnJhcnkod29yZGNsb3VkKQoKIyBBc3N1bWluZyB5b3UgaGF2ZSBhIGRhdGEgZnJhbWUgbmFtZWQgJ25ld19kYXRhJyB3aXRoIGNvbHVtbnMgJ2ludGVyY2VwdF9ncHMnLCAnaW50ZXJjZXB0X1dWUycsIGFuZCAnaXNvY29kZScKCiMgU2NhdHRlciBwbG90IHdpdGggbGFiZWxzCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShnZ3JlcGVsKQoKIyBBc3N1bWluZyB5b3UgaGF2ZSBhIGRhdGEgZnJhbWUgbmFtZWQgJ25ld19kYXRhJyB3aXRoIGNvbHVtbnMgJ2ludGVyY2VwdF9ncHMnLCAnaW50ZXJjZXB0X1dWUycsIGFuZCAnaXNvY29kZScKCmdncGxvdChuZXdfZGF0YSwgYWVzKHggPSBpbnRlcmNlcHRfZ3BzLCB5ID0gaW50ZXJjZXB0X1dWUywgbGFiZWwgPSBpc29jb2RlKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsKICBnZW9tX3RleHRfcmVwZWwoCiAgICBhZXMobGFiZWwgPSBpc29jb2RlKSwKICAgIGJveC5wYWRkaW5nID0gMC41LAogICAgcG9pbnQucGFkZGluZyA9IDAuMSwKICAgIGZvcmNlID0gNQogICkgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UsIGxpbmV0eXBlID0gImRhc2hlZCIpICsKICBsYWJzKHggPSAiSW50ZXJjZXB0IEdsb2JhbCBQcmVmZXJlbmNlIFN0dWR5IiwKICAgICAgIHkgPSAiSW50ZXJjZXB0IFdvcmxkIFZhbHVlIFN1cnZleSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHhsaW0oYygwLCAxLjA3KSkgKwogIHlsaW0oYygwLCAxLjA3KSkgKwogIGNvb3JkX2ZpeGVkKCkKCgojIEFubm90YXRlIHdpdGggd29yZCBjbG91ZAp3b3JkY2xvdWQod29yZHMgPSBuZXdfZGF0YSRpc29jb2RlLCBmcmVxID0gcmVwKDEsIG5yb3cobmV3X2RhdGEpKSwgc2NhbGUgPSBjKDIsIDAuNSkpCgoKIyBBbm5vdGF0ZSB3aXRoIHdvcmQgY2xvdWQKd29yZGNsb3VkKHdvcmRzID0gbmV3X2RhdGEkaXNvY29kZSwgZnJlcSA9IHJlcCgxLCBucm93KG5ld19kYXRhKSksIHNjYWxlID0gYygyLCAwLjUpKQoKCgoKIyBBc3N1bWluZyBtZXJnZWRfcmVzdWx0cyBoYXMgY29sdW1ucyBpbnRlcmNlcHRfZ3BzIGFuZCBpbnRlcmNlcHRfV1ZTCm1vZGVsIDwtIGxtKGludGVyY2VwdF9XVlMgfiBpbnRlcmNlcHRfZ3BzLCBkYXRhID0gbWVyZ2VkX3Jlc3VsdHMpCgojIFZpZXcgdGhlIHN1bW1hcnkgb2YgdGhlIHJlZ3Jlc3Npb24gbW9kZWwKc3VtbWFyeShtb2RlbCkKCiMgQ2FsY3VsYXRlIHRoZSBjb3JyZWxhdGlvbgpjb3JyZWxhdGlvbiA8LSBjb3IobWVyZ2VkX3Jlc3VsdHMkaW50ZXJjZXB0X2dwcywgbWVyZ2VkX3Jlc3VsdHMkaW50ZXJjZXB0X1dWUykKCiMgUHJpbnQgdGhlIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50CnByaW50KGNvcnJlbGF0aW9uKQoKCgogIAoKYGBgCgpgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQoKCgojIFBsb3R0aW5nIHVzaW5nIGdncGxvdDIKZ2dwbG90KG5ld19kYXRhLCBhZXMoeCA9IHNsb3BlX2FnZV9ncHMsIHkgPSBzbG9wZV9hZ2VfV1ZTLCBsYWJlbCA9IGlzb2NvZGUpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKwogIGdlb21fdGV4dF9yZXBlbCgKICAgIGFlcyhsYWJlbCA9IGlzb2NvZGUpLAogICAgYm94LnBhZGRpbmcgPSAwLjUsCiAgICBwb2ludC5wYWRkaW5nID0gMC4xLAogICAgZm9yY2UgPSA1CiAgKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSwgbGluZXR5cGUgPSAiZGFzaGVkIikgKwogIGxhYnMoeCA9ICJFZmZlY3Qgb2YgQWdlIG9uIFJpc2sgVGFraW5nIEdsb2JhbCBQcmVmZXJlbmNlIFN0dWR5IiwKICAgICAgIHkgPSAiRWZmZWN0IG9mIEFnZSBvbiBSaXNrIFRha2luZyBXb3JsZCBWYWx1ZSBTdXJ2ZXkiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB4bGltKC0wLjUsIDApICsKICB5bGltKGMoLTAuNSwgMCkpICsKICBjb29yZF9maXhlZCgpCgpuZXdfZGF0YQoKY29ycmVsYXRpb24gPC0gY29yKG5ld19kYXRhJHNsb3BlX2FnZV9ncHMsIG5ld19kYXRhJHNsb3BlX2FnZV9XVlMpCgojIFByaW50IHRoZSBjb3JyZWxhdGlvbiBjb2VmZmljaWVudApwcmludChjb3JyZWxhdGlvbikKCmBgYAoKCmBgYHtyfQojIFBsb3R0aW5nIHVzaW5nIGdncGxvdDIKZ2dwbG90KG5ld19kYXRhLCBhZXMoeCA9IHNsb3BlX2dlbmRlcl9ncHMsIHkgPSBzbG9wZV9nZW5kZXJfV1ZTLCBsYWJlbCA9IGlzb2NvZGUpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKwogIGdlb21fdGV4dF9yZXBlbCgKICAgIGFlcyhsYWJlbCA9IGlzb2NvZGUpLAogICAgYm94LnBhZGRpbmcgPSAwLjUsCiAgICBwb2ludC5wYWRkaW5nID0gMC4xLAogICAgZm9yY2UgPSA1CiAgKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSwgbGluZXR5cGUgPSAiZGFzaGVkIikgKwogIGxhYnMoeCA9ICJFZmZlY3Qgb2YgR2VuZGVyIG9uIFJpc2sgVGFraW5nIEdsb2JhbCBQcmVmZXJlbmNlIFN0dWR5IiwKICAgICAgIHkgPSAiRWZmZWN0IG9mIEdlbmRlciBvbiBSaXNrIFRha2luZyBXb3JsZCBWYWx1ZSBTdXJ2ZXkiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB4bGltKC0wLjYsIDAuMTIpICsKICB5bGltKGMoLTAuNiwgMC4xMikpICsKICBjb29yZF9maXhlZCgpCgpuZXdfZGF0YQoKY29ycmVsYXRpb24gPC0gY29yKG5ld19kYXRhJHNsb3BlX2dlbmRlcl9ncHMsIG5ld19kYXRhJHNsb3BlX2dlbmRlcl9XVlMpCgojIFByaW50IHRoZSBjb3JyZWxhdGlvbiBjb2VmZmljaWVudApwcmludChjb3JyZWxhdGlvbikKYGBgCmBgYHtyfQojaGFyZHNoaXAgZm9yIFdWUwpsaWJyYXJ5KHJlYWR4bCkKaGFyZHNoaXBfdmFsdWVzIDwtIHJlYWRfZXhjZWwoIi9Vc2Vycy9jcmlzdGluYWNhbmRpZG8vRG9jdW1lbnRzL0dpdGh1Yi9yaXNrX3d2cy9kYXRhL2hhcmRzaGlwX2NvbXBsZXRlLnhsc3giKSAjIFJlYWQgZGF0YSBmcm9tIHRoZSBFeGNlbCBmaWxlCgpsYWJlbHMgPC0gYygiY291bnRyeSIsICJjb2RlIiwgImdkcCIsICJnaW5pIiwgIkluZmFudF9tb3J0YWxpdHkiLCAibGlmZV9leHBlY3QiLCAiaGFyZHNoaXAiKQoKcHJpbnQoaGFyZHNoaXBfdmFsdWVzKQoKIyBBc3N1bWluZyBoYXJkc2hpcF9kYXRhX2NvbXBsZXRlIGlzIHlvdXIgZGF0YSBmcmFtZSB3aXRoIHRoZSBtZW50aW9uZWQgY29sdW1ucwojIFJlcGxhY2UgdGhlIGNvbHVtbiBuYW1lcyBhcyBwZXIgeW91ciBhY3R1YWwgY29sdW1uIG5hbWVzCgojIFotc3RhbmRhcmRpemUgc3BlY2lmaWMgY29sdW1ucwpoYXJkc2hpcF92YWx1ZXMkZ2RwIDwtIHNjYWxlKGhhcmRzaGlwX3ZhbHVlcyRnZHApCmhhcmRzaGlwX3ZhbHVlcyRnaW5pX2luY29tZSA8LSBzY2FsZShoYXJkc2hpcF92YWx1ZXMkZ2luaV9pbmNvbWUpCmhhcmRzaGlwX3ZhbHVlcyRJbmZhbnRfbW9ydGFsaXR5IDwtIHNjYWxlKGhhcmRzaGlwX3ZhbHVlcyRJbmZhbnRfbW9ydGFsaXR5KQpoYXJkc2hpcF92YWx1ZXMkbGlmZV9leHBlY3QgPC0gc2NhbGUoaGFyZHNoaXBfdmFsdWVzJGxpZmVfZXhwZWN0KQpoYXJkc2hpcF92YWx1ZXMkbWVhbl9ob21pY2lkZSA8LSBzY2FsZShoYXJkc2hpcF92YWx1ZXMkbWVhbl9ob21pY2lkZSkKCmhhcmRzaGlwX3ZhbHVlcwoKaGFyZHNoaXBfdmFsdWVzIDwtIGhhcmRzaGlwX3ZhbHVlcyU+JQogIG11dGF0ZShoYXJkc2hpcCA9IChtZWFuX2hvbWljaWRlICsgZ2RwICsgSW5mYW50X21vcnRhbGl0eSArIGxpZmVfZXhwZWN0ICsgZ2luaV9pbmNvbWUpIC8gNSkKaGFyZHNoaXBfdmFsdWVzCmhhcmRzaGlwX2RhdGFfY29tcGxldGUgPC0gbGVmdF9qb2luKHJlZ3Jlc3Npb25fcmVzdWx0c19XVlMsIGhhcmRzaGlwX3ZhbHVlcywgYnkgPSAiY291bnRyeSIpCmhhcmRzaGlwX2RhdGFfY29tcGxldGUKCmBgYAoKCmBgYApgYGB7cn0KCiAgCgpgYGAKCmBgYHtyfQoKYGBgCmBgYHtyfQpgYGB7cn0KbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KGdncGxvdDIpCiNGb3IgV1ZTCmdncGxvdChoYXJkc2hpcF9kYXRhX2NvbXBsZXRlLCBhZXMoeCA9IGhhcmRzaGlwLCB5ID0gaW50ZXJjZXB0LCBsYWJlbCA9IGlzb2NvZGUpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKwogIGdlb21fdGV4dF9yZXBlbCgKICAgIGFlcyhsYWJlbCA9IGlzb2NvZGUpLAogICAgYm94LnBhZGRpbmcgPSAwLjUsCiAgICBwb2ludC5wYWRkaW5nID0gMC4xLAogICAgZm9yY2UgPSA1CiAgKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSwgbGluZXR5cGUgPSAiZGFzaGVkIikgKwogIGxhYnMoeCA9ICJIYXJkc2hpcCIsCiAgICAgICB5ID0gIlJpc2sgVGFraW5nIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgeGxpbSgtMiwgMikgKwogIHlsaW0oLTAuNiwgMSkgKwogIGNvb3JkX2ZpeGVkKHJhdGlvID0gMi41KQpgYGAKCgpgYGAKCmBgYHtyfQpsaWJyYXJ5KGdncmVwZWwpCgoKbGlicmFyeShnZ3JlcGVsKQojRm9yIFdWUwpnZ3Bsb3QoaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSwgYWVzKHggPSBoYXJkc2hpcCwgeSA9IHNsb3BlX2FnZSwgbGFiZWwgPSBpc29jb2RlKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDMpICsKICBnZW9tX3RleHRfcmVwZWwoCiAgICBhZXMobGFiZWwgPSBpc29jb2RlKSwKICAgIGJveC5wYWRkaW5nID0gMC41LAogICAgcG9pbnQucGFkZGluZyA9IDAuMSwKICAgIGZvcmNlID0gNQogICkgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UsIGxpbmV0eXBlID0gImRhc2hlZCIpICsKICBsYWJzKHggPSAiSGFyZHNoaXAiLAogICAgICAgeSA9ICJBZ2UgRWZmZWN0IikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgIHhsaW0oLTIsIDIpICsKICBjb29yZF9maXhlZChyYXRpbyA9IDgpCiAKCgpgYGAKCgpgYGB7cn0KbGlicmFyeShnZ3JlcGVsKQoKZ2dwbG90KGhhcmRzaGlwX2RhdGFfY29tcGxldGUsIGFlcyh4ID0gaGFyZHNoaXAsIHkgPSBpbnRlcmNlcHQsIGxhYmVsID0gaXNvY29kZSkpICsKICBnZW9tX3BvaW50KHNpemUgPSAzKSArCiAgZ2VvbV90ZXh0X3JlcGVsKAogICAgYWVzKGxhYmVsID0gaXNvY29kZSksCiAgICBib3gucGFkZGluZyA9IDAuNSwKICAgIHBvaW50LnBhZGRpbmcgPSAwLjEsCiAgICBmb3JjZSA9IDUKICApICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IEZBTFNFLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgbGFicyh4ID0gIkhhcmRzaGlwIiwKICAgICAgIHkgPSAiUmlzayBUYWtpbmciKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBjb29yZF9maXhlZCgpCmBgYAoKYGBge3J9CiMgT3V0cHV0IGZvciBsaW5lYXIgbW9kZWwgZm9yIGhhcmRzaGlwICYgcmlza3Rha2luZwoKIyBMaW5lYXJlcyBNb2RlbGwgZsO8ciBkZW4gZXJzdGVuIEZhbGwKbW9kZWxfaW50ZXJjZXB0IDwtIGxtKGhhcmRzaGlwIH4gaW50ZXJjZXB0LCBkYXRhID0gaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSkKIyBadXNhbW1lbmZhc3N1bmcgZGVzIE1vZGVsbHMKc3VtbWFyeV9pbnRlcmNlcHQgPC0gc3VtbWFyeShtb2RlbF9pbnRlcmNlcHQpCiMgWmVpZ2UgZGllIHZvbGxzdMOkbmRpZ2UgWnVzYW1tZW5mYXNzdW5nIGFuCnByaW50KHN1bW1hcnlfaW50ZXJjZXB0KQoKIyBDb3JyZWxhdGlvbiBIYXJkc2hpcCB1bmQgUmlzayBUYWtpbmcKCiMgRW50ZmVybmUgWmVpbGVuIG1pdCBmZWhsZW5kZW4gV2VydGVuIGluIGRlbiByZWxldmFudGVuIFNwYWx0ZW4KCiMgQmVyZWNobmUgZGllIEtvcnJlbGF0aW9uIGVybmV1dApjb3JyZWxhdGlvbiA8LSBjb3IoaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSRoYXJkc2hpcCwgaGFyZHNoaXBfZGF0YV9jb21wbGV0ZSRpbnRlcmNlcHQpCiMgWmVpZ2UgZGllIEtvcnJlbGF0aW9uIGFuCnByaW50KHBhc3RlKCJDb3JyZWxhdGlvbiBIYXJkc2hpcCB1bmQgUmlzayBUYWtpbmc6IiwgY29ycmVsYXRpb24pKQpgYGAKCmBgYHtyfQojIE91dHB1dCBmb3IgbGluZWFyIG1vZGVsIGZvciBoYXJkc2hpcCAmIHJpc2t0YWtpbmcKCiMgTGluZWFyZXMgTW9kZWxsIGbDvHIgZGVuIGVyc3RlbiBGYWxsCm1vZGVsX2ludGVyY2VwdCA8LSBsbShoYXJkc2hpcCB+IHNsb3BlX2FnZSwgZGF0YSA9IGhhcmRzaGlwX2RhdGFfY29tcGxldGUpCiMgWnVzYW1tZW5mYXNzdW5nIGRlcyBNb2RlbGxzCnN1bW1hcnlfaW50ZXJjZXB0IDwtIHN1bW1hcnkobW9kZWxfaW50ZXJjZXB0KQojIFplaWdlIGRpZSB2b2xsc3TDpG5kaWdlIFp1c2FtbWVuZmFzc3VuZyBhbgpwcmludChzdW1tYXJ5X2ludGVyY2VwdCkKCiMgQ29ycmVsYXRpb24gSGFyZHNoaXAgdW5kIFJpc2sgVGFraW5nCgojIEVudGZlcm5lIFplaWxlbiBtaXQgZmVobGVuZGVuIFdlcnRlbiBpbiBkZW4gcmVsZXZhbnRlbiBTcGFsdGVuCgojIEJlcmVjaG5lIGRpZSBLb3JyZWxhdGlvbiBlcm5ldXQKY29ycmVsYXRpb24gPC0gY29yKGhhcmRzaGlwX2RhdGFfY29tcGxldGUkaGFyZHNoaXAsIGhhcmRzaGlwX2RhdGFfY29tcGxldGUkc2xvcGVfYWdlKQojIFplaWdlIGRpZSBLb3JyZWxhdGlvbiBhbgpwcmludChwYXN0ZSgiQ29ycmVsYXRpb24gSGFyZHNoaXAgdW5kIFJpc2sgVGFraW5nOiIsIGNvcnJlbGF0aW9uKSkKYGBgCgpgYGB7cn0KIyBPdXRwdXQgZm9yIGxpbmVhciBtb2RlbCBmb3IgaGFyZHNoaXAgJiByaXNrdGFraW5nCgojIExpbmVhcmVzIE1vZGVsbCBmw7xyIGRlbiBlcnN0ZW4gRmFsbAptb2RlbF9pbnRlcmNlcHQgPC0gbG0oaGFyZHNoaXAgfiBzbG9wZV9nZW5kZXIsIGRhdGEgPSBoYXJkc2hpcF9kYXRhX2NvbXBsZXRlKQojIFp1c2FtbWVuZmFzc3VuZyBkZXMgTW9kZWxscwpzdW1tYXJ5X2ludGVyY2VwdCA8LSBzdW1tYXJ5KG1vZGVsX2ludGVyY2VwdCkKIyBaZWlnZSBkaWUgdm9sbHN0w6RuZGlnZSBadXNhbW1lbmZhc3N1bmcgYW4KcHJpbnQoc3VtbWFyeV9pbnRlcmNlcHQpCgojIENvcnJlbGF0aW9uIEhhcmRzaGlwIHVuZCBSaXNrIFRha2luZwoKIyBFbnRmZXJuZSBaZWlsZW4gbWl0IGZlaGxlbmRlbiBXZXJ0ZW4gaW4gZGVuIHJlbGV2YW50ZW4gU3BhbHRlbgoKIyBCZXJlY2huZSBkaWUgS29ycmVsYXRpb24gZXJuZXV0CmNvcnJlbGF0aW9uIDwtIGNvcihoYXJkc2hpcF9kYXRhX2NvbXBsZXRlJGhhcmRzaGlwLCBoYXJkc2hpcF9kYXRhX2NvbXBsZXRlJHNsb3BlX2dlbmRlcikKIyBaZWlnZSBkaWUgS29ycmVsYXRpb24gYW4KcHJpbnQocGFzdGUoIkNvcnJlbGF0aW9uIEhhcmRzaGlwIHVuZCBSaXNrIFRha2luZzoiLCBjb3JyZWxhdGlvbikpCmBgYAoKYGBge3J9CldWU19kYXRhCiMgTGluZWFyZXMgTW9kZWxsIGbDvHIgUmlzayBUYWtpbmcgdnMuIEFnZQptb2RlbF9yaXNrX2FnZSA8LSBsbShaX3Njb3JlX3Jpc2t0YWtpbmcgfiB6X3Njb3JlX2FnZSArIGZhY3RvcihnZW5kZXIpLCBkYXRhID0gV1ZTX2RhdGEpCgojIFp1c2FtbWVuZmFzc3VuZyBkZXMgTW9kZWxscwpzdW1tYXJ5X3Jpc2tfYWdlIDwtIHN1bW1hcnkobW9kZWxfcmlza19hZ2UpCgojIFplaWdlIGRpZSB2b2xsc3TDpG5kaWdlIFp1c2FtbWVuZmFzc3VuZyBhbgpwcmludChzdW1tYXJ5X3Jpc2tfYWdlKQoKIyBCZXJlY2huZSBkaWUgS29ycmVsYXRpb24gZXJuZXV0CmNvcnJlbGF0aW9uIDwtIGNvcihXVlNfZGF0YSR6X3Njb3JlX2FnZSwgV1ZTX2RhdGEkWl9zY29yZV9yaXNrdGFraW5nLCBXVlNfZGF0YSRnZW5kZXIpCiMgWmVpZ2UgZGllIEtvcnJlbGF0aW9uIGFuCnByaW50KHBhc3RlKCJDb3JyZWxhdGlvbiBIYXJkc2hpcCB1bmQgUmlzayBUYWtpbmc6IiwgY29ycmVsYXRpb24pKQoKYGBgCgpgYGB7cn0KbmV3X2RhdGEKYGBgCgoKCgpgYGB7cn0KIyBMaW5lYXJlcyBNb2RlbGwgZsO8ciBSaXNrIFRha2luZyB2cy4gQWdlCm1vZGVsIDwtIGxtKHNsb3BlX2dlbmRlcl9ncHMgfiBzbG9wZV9nZW5kZXJfV1ZTLCBkYXRhID0gbmV3X2RhdGEpCgojIFp1c2FtbWVuZmFzc3VuZyBkZXMgTW9kZWxscwpzdW1tYXJ5X21vZGVsIDwtIHN1bW1hcnkobW9kZWwpCgojIFplaWdlIGRpZSB2b2xsc3TDpG5kaWdlIFp1c2FtbWVuZmFzc3VuZyBhbgpwcmludChzdW1tYXJ5X21vZGVsKQoKIyBCZXJlY2huZSBkaWUgS29ycmVsYXRpb24gZXJuZXV0CmNvcnJlbGF0aW9uIDwtIGNvcihuZXdfZGF0YSRzbG9wZV9hZ2VfZ3BzLCBuZXdfZGF0YSRzbG9wZV9hZ2VfV1ZTKQojIFplaWdlIGRpZSBLb3JyZWxhdGlvbiBhbgpwcmludChwYXN0ZSgiQ29ycmVsYXRpb24gSGFyZHNoaXAgdW5kIFJpc2sgVGFraW5nOiIsIGNvcnJlbGF0aW9uKSkKYGBgCgpgYGB7cn0KbGlicmFyeShnZ3JlcGVsKQoKCmxpYnJhcnkoZ2dyZXBlbCkKCmdncGxvdChoYXJkc2hpcF9kYXRhX2NvbXBsZXRlLCBhZXMoeCA9IGhhcmRzaGlwLCB5ID0gc2xvcGVfZ2VuZGVyLCBsYWJlbCA9IGlzb2NvZGUpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKwogIGdlb21fdGV4dF9yZXBlbCgKICAgIGFlcyhsYWJlbCA9IGlzb2NvZGUpLAogICAgYm94LnBhZGRpbmcgPSAwLjUsCiAgICBwb2ludC5wYWRkaW5nID0gMC4xLAogICAgZm9yY2UgPSA1CiAgKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSwgbGluZXR5cGUgPSAiZGFzaGVkIikgKwogIGxhYnMoeCA9ICJIYXJkc2hpcCIsCiAgICAgICB5ID0gIkdlbmRlciBFZmZlY3QiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICAgeGxpbSgtMiwgMikgKwogIGNvb3JkX2ZpeGVkKHJhdGlvID0gNikKIApgYGAKCgoKCgoKCg==